home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 1 / Meeting Pearls Vol 1 (1994).iso / installed_progs / text / faqs / linear-programming-faq < prev    next >
Encoding:
Internet Message Format  |  1994-05-04  |  56.3 KB

  1. Subject: Linear Programming FAQ
  2. Newsgroups: news.answers,sci.answers,sci.op-research
  3. From: jwg@cray.com (John Gregory)
  4. Date: 2 May 94 16:17:15 CDT
  5.  
  6. Posted-By: auto-faq 2.4
  7. Archive-name: linear-programming-faq
  8. Last-modified: May 1, 1994
  9.  
  10.          Linear Programming - Frequently Asked Questions List
  11.                        (linear-programming-faq)
  12.           Posted monthly to Usenet newsgroup sci.op-research
  13.                  Most recent update: May 1, 1994
  14.  
  15. -----------------------------------------------------------------------
  16.  
  17. "The best way to get information on Usenet isn't to ask a question, but
  18.  to post the wrong information."  -- aahz@netcom.com
  19.  
  20. Q0.  "What's in this FAQ?"
  21.  
  22. A:  Table of Contents
  23.    Q1.  "What is Linear Programming?"
  24.    Q2.  "Where is there a good code to solve LP problems?"
  25.    Q3.  "Oh, and we also want to solve it as an integer program."
  26.    Q4.  "I wrote an optimization code.  Where are some test models?"
  27.    Q5.  "What is MPS format?"
  28.    Q6.  "Just a quick question..."
  29.    Q7.  "What references are there in this field?"
  30.    Q8.  "How do I access the Netlib server?"
  31.    Q9.  "Who maintains this FAQ list?"
  32.  
  33. See also the related FAQ on Nonlinear Programming (NLP).
  34.  
  35. -----------------------------------------------------------------------
  36.  
  37. Q1.  "What is Linear Programming?"
  38.  
  39. A:  A Linear Program (LP) is a problem that can be put into the form
  40.  
  41.     minimize   cx
  42.     subject to Ax  = b
  43.                 x >= 0
  44.  
  45. where x is the vector of variables to be solved for, A is a matrix of
  46. known coefficients, and c and b are vectors of known coefficients.  The
  47. expression "cx" is called the objective function, and the equations
  48. "Ax=b" are called the constraints.  All these entities must have
  49. consistent dimensions, of course, and you can add "transpose" symbols
  50. to taste.  The matrix A is generally not square, hence you don't solve
  51. an LP by just inverting A.  Usually A has more columns than rows, and
  52. Ax=b  is therefore under-determined, leaving great latitude in the
  53. choice of x with which to minimize cx.
  54.  
  55. LP problems are usually solved by a technique known as the Simplex
  56. Method, developed in the 1940's and after.  Briefly stated, this method
  57. works by taking a sequence of square submatrices of A and solving for
  58. x, in such a way that successive solutions always improve, until a
  59. point is reached where improvement is no longer possible.  A family of
  60. LP algorithms known as Interior Point (or Barrier) methods comes from
  61. nonlinear programming approaches proposed in 1958 and further developed
  62. in the late 80's.  These methods can be faster for many (but so far not
  63. all) large-scale problems.  Such methods are characterized by
  64. constructing a sequence of trial solutions that go through the interior
  65. of the solution space, in contrast to the Simplex Method which stays
  66. on the boundary and examines only the corners (vertices).  Large-scale
  67. LP codes, whatever the algorithm, invariably use general-structure
  68. sparse matrix techniques.
  69.  
  70. LP has a variety of uses, in such areas as petroleum, finance,
  71. forestry, transportation, and the military.
  72.  
  73. The word "Programming" is used here in the sense of "planning"; the
  74. necessary relationship to computer programming was incidental to the
  75. choice of name.  Hence the phrase "LP program" to refer to a piece of
  76. software is not a redundancy, although I tend to use the term "code"
  77. instead of "program" to avoid the possible ambiguity.
  78.  
  79. -----------------------------------------------------------------------
  80.  
  81. Q2.  "Where is there a good code to solve LP problems?"
  82.  
  83. A:  Nowadays, with good commercial software (i.e., code that you pay
  84. for), models with a few thousand constraints and several thousand
  85. variables can be tackled on a 386 PC.  Workstations can often handle
  86. models with variables in the tens of thousands, or even greater, and
  87. mainframes can go larger still.  Public domain (free) codes can be
  88. relied on to solve models of somewhat smaller dimension.  The choice of
  89. code can make more difference than the choice of computer hardware.
  90. It's hard to be specific about model sizes and speed, a priori, due to
  91. the wide variation in things like model structure and variation in
  92. factorizing the basis matrices; just because a given code has solved a
  93. model of a certain dimension, it may not be able to solve *all* models
  94. of the same size, or in the same amount of time.
  95.  
  96. There is a public domain code, written in C, called "lp_solve" that its
  97. author (Michel Berkelaar, email at  michel@es.ele.tue.nl ) says has
  98. solved models with up to 30,000 variables and 50,000 constraints.  The
  99. author requests that people retrieve it by anonymous FTP from
  100. "ftp.es.ele.tue.nl" (numerical address at last check: 131.155.20.126)
  101. in directory pub/lp_solve, file lp_solve.tar.Z.  There is an older
  102. version to be found in the Usenet archives, but it contains bugs that
  103. have been fixed in the meantime, and hence is unsupported.  The author
  104. also made available a program that converts data files from MPS-format
  105. into lp_solve's own input format; it's in the same directory, in file
  106. mps2eq_0.2.tar.Z.  (As an editorial opinion, I must state that
  107. difficult models will give this code trouble.  It's not as good as a
  108. commercial code.  But for someone who isn't sure just what kind of LP
  109. code is needed, it represents a very reasonable first try, since it
  110. does solve non-trivial-sized models, and it is free.)
  111.  
  112. For academic users only, on a limited variety of platforms, there is
  113. available a free version of LOQO, a linear/quadratic program solver.
  114. Binary executables have been installed, for anonymous FTP at
  115. elib.zib-berlin.de  in /pub/opt-net/software/loqo/1.08, There are
  116. versions for workstations by IBM, Silicon Graphics, HP, and Sun.  The
  117. package includes a subroutine library (libloqo.a), an executable
  118. (loqo), the source for the main part of loqo (loqo.c), and associated
  119. documentation (loqo.dvi and *.eps).  The algorithm used is a one-phase
  120. primal-dual-symmetric interior-point method.  If you wish to purchase
  121. a commercial version, please contact Bob Vanderbei (rvdb@Princeton.EDU)
  122. for details.
  123.  
  124. The next several suggestions are for public-domain codes that are
  125. severely limited by the algorithm they use (tableau Simplex); they may
  126. be OK for models with (on the order of) 100 variables and constraints,
  127. but it's unlikely they will be satisfactory for larger models.  1) For
  128. DOS/PC users, there is an LP and Linear Goal Programming binary called
  129. "tslin", by anonymous FTP at garbo.uwasa.fi in directory /pc/ts (the
  130. current file name is tslin33b.zip, using ZIP compression), or else I
  131. suggest contacting Prof. Salmi at ts@uwasa.fi .  For North American
  132. users, the garbo server is mirrored on FTP site wuarchive.wustl.edu,
  133. in directory mirrors/garbo.uwasa.fi .  2) Also on the garbo server is a
  134. file called lp261.zip, having a descriptor of "Linear Programming
  135. Optimizer by ScanSoft".  It consists of PC binaries, and is evidently
  136. some sort of shareware (i.e., not strictly public domain).  3) There is
  137. an ACM TOMS routine for LP, #552, available from the netlib server, in
  138. directory /netlib/toms.  This routine was designed for fitting data to
  139. linear constraints using an L1 norm, but it uses a modification of the
  140. Simplex Method and could presumably be modified to satisfy LP purposes.
  141. 4) There are books that contain source code for the Simplex Method.
  142. See the section on references.  You should not expect such code to be
  143. robust.  In particular, you can check whether it uses a 2-dimensional
  144. array for the A-matrix; if so, it is surely using the tableau Simplex
  145. Method rather than sparse methods, and it will not be useful for large
  146. models.
  147.  
  148. For Macintosh users there is a package of unknown quality called LinPro
  149. that is available via various Gopher servers.  More details will be
  150. given here as they become available.
  151.  
  152. The following suggestions may represent a low-cost way of solving LP's
  153. if you already have certain software available to you.  1) Some
  154. spreadsheet programs have an embedded LP solver, or offer one as an
  155. installable option.  2) A package called QSB (Quantitative Systems for
  156. Business, from Prentice-Hall publishers) has an LP module among its
  157. routines.  3) If you have access to a commercial math library, such as
  158. SAS, IMSL or NAG, you may be able to use an LP routine from there.
  159. 4) Mathematical systems MATLAB (The Math Works, Inc., (508) 653-1415,
  160. see comment in the NLP FAQ) and MAPLE (reference?) also have LP
  161. solvers; an interface from MATLAB to lp_solve is available from Jeff
  162. Kantor (Jeffrey.Kantor@nd.edu), and there's a Simplex code written in
  163. the MATLAB language, available from the netlib server, file
  164. netlib/matlab/optimization/simplex1.m.Z.  I've also heard of an FTP
  165. site with user-contributed .m files located at ftp.mathworks.com.
  166. (There's a Usenet newsgroup on MATLAB: comp.soft-sys.matlab.)  If speed
  167. matters to you, then according to a Usenet posting by Pascal Koiran
  168. (koiran@ens-lyon.fr), on randomly generated LP models, MATLAB was an
  169. order of magnitude faster than MAPLE on a 200x20 problem but an order
  170. of magnitude slower than lp_solve on a 50x100 problem.  (I don't intend
  171. to get into benchmarking in this document, but I mention these results
  172. just to explain why I choose to focus mostly on special purpose LP
  173. software.)
  174.  
  175. If your models prove to be too difficult for free or add-on software to
  176. handle, then you may have to consider acquiring a commercial LP code.
  177. Dozens of such codes are on the market.  There are many considerations
  178. in selecting an LP code.  Speed is important, but LP is complex enough
  179. that different codes go faster on different models; you won't find a
  180. "Consumer Reports" article to say with certainty which code is THE
  181. fastest.  I usually suggest getting benchmark results for your
  182. particular type of model if speed is paramount to you.  Benchmarking
  183. can also help determine whether a given code has sufficient numerical
  184. stability for your kind of models.
  185.  
  186. Other questions you should answer: Can you use a stand-alone code, or
  187. do you need a code that can be used as a callable library, or do you
  188. require source code?  Do you want the flexibility of a code that runs
  189. on many platforms and/or operating systems, or do you want code that's
  190. tuned to your particular hardware architecture (in which case your
  191. hardware vendor may have suggestions)?  Is the choice of algorithm
  192. (Simplex, Interior Point) important to you?  Do you need an interface
  193. to a spreadsheet code?  Is the purchase price an overriding concern?
  194. If you are at a university, is the software offered at an academic
  195. discount?  How much hotline support do you think you'll need?  There is
  196. usually a large difference in LP codes, in performance (speed,
  197. numerical stability, adaptability to computer architectures) and in
  198. features, as you climb the price scale.
  199.  
  200. At the end of this section is a *very* condensed version of a survey of
  201. LP software published in the June 1992 issue of "OR/MS Today", a joint
  202. publication of ORSA (Operations Research Society of America) and TIMS
  203. (The Institute of Management Science).  For further information I would
  204. suggest you read the full article.  It's likely that you can find a
  205. copy, either through a library, or by contacting a member of these two
  206. organizations (most universities have probably several members among
  207. the faculty and student body). This magazine also carries
  208. advertisements for many of these products, which may give you
  209. additional information to help make a decision.
  210.  
  211. In the table below, I give the name of the software and the phone
  212. number listed in the June 1992 survey.  Many of these companies have
  213. toll-free (800) numbers, but for the benefit of people outside the US
  214. I have listed an ordinary phone number where I know of it.  To keep the
  215. table short enough to fit here, I decided not to include postal
  216. addresses.  I have included, where I know of one, an email address
  217. (information not given in the June 1992 survey), and other information
  218. obtained from non-proprietary sources.  For some companies there may
  219. exist European or Asian contact points, but this is beyond the scope
  220. of this document.  Consult the full survey for more information on
  221. contacting vendors.
  222.  
  223. The first part of the table consists of software I deem to be LP
  224. solvers.  The second part is software that in some sense is a front end
  225. to the solvers (modeling software).  In some cases it becomes a hazy
  226. distinction, but I hope this arrangement of information turns out to be
  227. useful to the reader.
  228.  
  229. Under "H/W" is the minimum hardware said to be needed to run the code;
  230. generally I conceive of a hierarchy where PC's (and Macintoshes) are
  231. the least powerful, then workstations (WS) like Suns and RS-6000's, on
  232. up to supercomputers, so by the symbol "^" I mean "and up", namely that
  233. most commonly-encountered platforms are supported beyond the given
  234. minimum level.  The code PC2 means PC-286 and above, and PC3 means
  235. PC-386 and above.
  236.  
  237. Even more so than usual, I emphasize that you must use this information
  238. at your own risk.  I provide it as a convenience to those readers who
  239. have difficulty in locating the OR/MS Today survey.  I take no
  240. responsibility for errors either in the original article or by my act
  241. of copying it manually, though I will gladly correct any mistakes that
  242. are pointed out to me.
  243.  
  244. Key to Features:  S=Simplex    I=Interior-Point or Barrier
  245.                   Q=Quadratic  G=General-Nonlinear
  246.                   M=MIP        N=Network
  247.                   V=Visualization
  248. Solver
  249. Code Name    Feat. H/W        Phone        Email address
  250. ---------    ----- ---------- ------------ -------------
  251. AT&T KORBX   IQ    WS ^       908-949-8966
  252. Best Answer  S     Mac-Plus   510-943-7667
  253. CPLEX        SIMN  PC3 ^      702-831-7744 info@cplex.com
  254. Excel        SMG   PC/Mac     206-882-8080
  255. FortLP       SM    PC ^       708-971-2337
  256. HS/LP        SM    PC3/VAX    201-627-1424
  257. IBM OSL      SIMNQ PC/WS/IBM  914-385-6034 randym@vnet.ibm.com
  258. INCEPTA      SMV   PC3        416-896-0515
  259. LAMPS        SM    PC3 ^      413-584-1605 al@andltd.and.nl
  260. LINDO        SMQ   PC ^       312-871-2524 lindo@delphi.com
  261. LOQO         IQ    PC ^       609-258-0876 rvdb@princeton.edu
  262. LP88         S     PC         703-360-7600
  263. LPS-867      SM    PC/RS6000  609-737-6800
  264. MathPro      SMV   PC2/WS     202-887-0296
  265. MILP88       SM    PC         703-360-7600
  266. MILP LO      SV    PC       (+361)149-7531
  267. MINTO        M     WS         404-894-6287
  268. MPS-III      SMNQ  PC3 ^      703-412-3201
  269. MSLP-PC      S     PC         604-361-9778
  270. OMP          SM    PC/VAX/WS  919-847-9997
  271. PC-PROG      SMQ   PC         919-847-9997 Ge.vanGeldorp@lr.tudelft.nl
  272. SAS/OR       SMN   PC ^       919-677-8000
  273. SCICONIC     SM    PC3 ^   (+44)908-585858
  274. STORM        SMN   PC         216-464-1209
  275. TurboSimplex S     PC/Mac     703-351-5272
  276. What If      SMG   PC         800-447-2226
  277. XA           SM    PC ^       818-441-1565 sunsetsoft@aol.com
  278. XPRESS-MP    SM    PC3/Mac ^  202-887-0296 rcd@dashbh.demon.co.uk
  279.  
  280. Modeling
  281. Code Name          H/W        Phone        Email address
  282. ---------          ---------- ------------ -------------
  283. AMPL               PC3 ^      508-777-9069
  284. DATAFORM           PC3 ^      703-558-8701
  285. GAMS               PC2 ^      415-583-8840 gams@gams.com
  286. LINGO              PC ^       312-871-2524 lindo@delphi.com
  287. MIMI/LP            WS         908-464-8300
  288. MPL Sys.           PC         703-351-5272
  289. OMNI               PC3 ^      202-627-1424
  290. VMP                PC3/WS     301-622-0694
  291. What's Best!       PC/Mac/WS  800-441-2378 lindo@delphi.com
  292.  
  293. The author of the OR/MS Today survey, Ramesh Sharda, has updated and
  294. expanded it in 1993 into a larger report called "Linear and Discrete
  295. Optimization and Modeling Software: A Resource Handbook".  For
  296. information, contact Lionheart Publishing Inc., 2555 Cumberland
  297. Parkway, Suite 299, Atlanta, GA 30339. Phone: (404)-431-0867.  This
  298. book is fairly expensive, and geared toward users whose needs for LP
  299. software are considerable.  Another book that just became available in
  300. November 1993 is the "Optimization Software Guide," by Jorge More and
  301. Stephen Wright, from SIAM Books.  Call 1-800-447-7426 to order ($24.50,
  302. less ten percent if you are a SIAM member).  It contains references to
  303. 75 available software packages (not all of them just LP), and goes into
  304. more detail than is possible in this FAQ.
  305.  
  306. -----------------------------------------------------------------------
  307.  
  308. Q3.  "Oh, and we also want to solve it as an integer program.
  309.  
  310. A:  Integer LP models are ones where the answers must not take
  311. fractional values.  It may not be obvious that this is a VERY much
  312. harder problem than ordinary LP, but it is nonetheless true.  The
  313. buzzword is "NP-Completeness", the definition of which is beyond the
  314. scope of this document but means in essence that, in the worst case,
  315. the amount of time to solve a family of related problems goes up
  316. exponentially as the size of the problem grows, for all algorithms that
  317. solve such problems to a proven answer.
  318.  
  319. Integer models may be ones where only some of the variables are to be
  320. integer and others may be real-valued (termed "Mixed Integer LP" or
  321. MILP, or "Mixed Integer Programming" or MIP); or they may be ones where
  322. all the variables must be integral (termed "Integer LP" or ILP).  The
  323. class of ILP is often further subdivided into problems where the only
  324. legal values are {0,1} ("Binary" or "Zero-One" ILP), and general
  325. integer problems.  For the sake of generality, the Integer LP problem
  326. will be referred to here as MIP, since the other classes can be viewed
  327. as special cases of MIP.  MIP, in turn, is a particular member of the
  328. class of Discrete Optimization problems.
  329.  
  330. People are sometimes surprised to learn that MIP problems are solved
  331. using floating point arithmetic.  Although various algorithms for MIP
  332. have been studied, most if not all available general purpose large-
  333. scale MIP codes use a method called "Branch and Bound" to try to find
  334. an optimal solution.  Briefly stated, B&B solves MIP by solving a
  335. sequence of related LP models.  (As a point of interest, the Simplex
  336. Method currently retains an advantage over the newer Interior Point
  337. methods for solving these sequences of LP's.)  Good codes for MIP
  338. distinguish themselves more by solving shorter sequences of LP's, than
  339. by solving the individual LP's faster.  Even more so than with regular
  340. LP, a costly commercial code may prove its value to you if your MIP
  341. model is difficult.
  342.  
  343. You should be prepared to solve *far* smaller MIP models than the
  344. corresponding LP model, given a certain amount of time you wish to
  345. allow (unless you and your model happen to be very lucky). There exist
  346. models that are considered challenging, with a few dozen variables.
  347. Conversely, some models with tens of thousands of variables solve
  348. readily.  The best explanations of "why" usually seem to happen after
  349. the fact.  8v)  But a MIP model with hundreds of variables should
  350. always be approached, initially at least, with a certain amount of
  351. humility.
  352.  
  353. A major exception to this somewhat gloomy outlook is that there are
  354. certain models whose LP solution always turns out to be integer.  Best
  355. known of these is the so-called Network-Flow Problem.  Special cases of
  356. this problem are the Transportation Problem, the Assignment Problem,
  357. and the Shortest Path Problem.  The theory of unimodular matrices is
  358. fundamental here.  It turns out that these particular problems are best
  359. solved by specialized routines that take major shortcuts in the Simplex
  360. Method, and as a result are relatively quick-running even compared to
  361. ordinary LP.  Some commercial LP solvers include a network solver.  See
  362. [Kennington], which contains some source code for Netflo.  Netflo is
  363. available by anonymous FTP at dimacs.rutgers.edu, in directory
  364.     /pub/netflow/mincost/solver-1
  365. but I don't know the copyright situation (I always thought you had to
  366. buy the book to get the code).  Another text containing Fortran code is
  367. [Bertsekas], though I am unaware of any place that has the source code
  368. online.  There is an ACM TOMS routine, #548, that solves the Assignment
  369. problem using the Hungarian Method, available from the netlib server,
  370. in directory /netlib/toms.  An article in the ORSA Journal on Computing
  371. in 1991 by Kennington and Wang investigated the performance of some
  372. algorithms.
  373.  
  374. The public domain code "lp_solve", mentioned earlier, accepts MIP
  375. models, as do a large number of the commercial LP codes in the June
  376. 1992 OR/MS Today survey (see section above).  There is, in the April
  377. 1994 issue of OR/MS Today, a survey of MIP codes, which largely
  378. overlaps the content of the earlier survey on LP.
  379.  
  380. I have seen mention made of algorithm 333 in the Collected Algorithms
  381. from CACM, though I'd be surprised if it was robust enough to solve
  382. large models.
  383.  
  384. In [Syslo] is code for 28 algorithms, most of which pertain to some
  385. aspect of Discrete Optimization.
  386.  
  387. There is a code called Omega that analyzes systems of linear equations
  388. in integer variables.  It does not solve optimization problems, except
  389. in the case that a model reduces completely, but its features could be
  390. useful in analyzing and reducing MIP models.  Have a look via anonymous
  391. FTP at ftp.cs.umd.edu:pub/omega (documentation is provided there), or
  392. contact Bill Pugh at pugh@cs.umd.edu.
  393.  
  394. Mustafa Akgul (AKGUL@TRBILUN.BITNET) at Bilkent University maintains an
  395. archive via anonymous FTP (firat.bcc.bilkent.edu.tr or 139.179.10.13).
  396. In addition to a copy of lp_solve (though I would recommend using the
  397. official source listed in the previous section), there is mip386.zip,
  398. which is a zip-compressed code for PC's.  He also has a couple of
  399. network codes and various other codes he has picked up.  All this is in
  400. directory pub/IEOR/Opt and its further subdirectories LP, PC, and
  401. Network.
  402.  
  403. The better commercial MIP codes have numerous parameters and options to
  404. give the user control over the solution strategy.  Most have the
  405. capability of stopping before an optimum is proved, printing the best
  406. answer obtained so far.  For many MIP models, stopping early is a
  407. practical necessity.  Fortunately, a solution that has been proved by
  408. the algorithm to be within, say, 1% of optimality often turns out to be
  409. the true optimum, and the bulk of the computation time is spent proving
  410. the optimality. For many modeling situations, a near-optimal solution
  411. is acceptable anyway.
  412.  
  413. Once one accepts that large MIP models are not typically solved to a
  414. proved optimal solution, that opens up a broad area of approximate
  415. methods, probabilistic methods and heuristics, as well as modifications
  416. to B&B.  See [Balas] which contains a useful heuristic for 0-1 MIP
  417. models.  See also the brief discussion of Genetic Algorithms and
  418. Simulated Annealing in the FAQ on Nonlinear Programming.
  419.  
  420. Whatever the solution method you choose, when trying to solve a
  421. difficult MIP model, it is usually crucial to understand the workings
  422. of the physical system (or whatever) you are modeling, and try to find
  423. some insight that will assist your chosen algorithm to work better.  A
  424. related observation is that the way you formulate your model can be as
  425. important as the actual choice of solver.  You should consider getting
  426. some assistance if this is your first time trying to solve a large
  427. (>100 integer variable) problem.
  428.  
  429. -----------------------------------------------------------------------
  430.  
  431. Q4.  "I wrote an optimization code.  Where are some test models?"
  432.  
  433. A:  If you want to try out your code on some real-world LP models,
  434. there is a very nice collection of small-to-medium-size ones (with a
  435. few that are rather large) on netlib, in directory lp/data.  The netlib
  436. LP files (after you uncompress them) are in a format called MPS, which
  437. is described in another section of this document.  Note that, when you
  438. receive a model, it may be compressed both with the Unix utility (use
  439. `uncompress` if the file name ends in .Z) AND with an LP-specific
  440. program (grab either emps.f or emps.c at the same time you download
  441. the model, then compile/run the program to reverse the compression).
  442.  
  443. Also on netlib is a collection of infeasible LP models, located in
  444. directory lp/infeas.
  445.  
  446. There is a collection of MIP models, housed at Rice University.  Send
  447. an email message containing "send catalog" to  softlib@rice.edu , to
  448. get started.  Or try anonymous FTP at softlib.cs.rice.edu, then
  449. "cd /pub/miplib".
  450.  
  451. There is a collection of network-flow codes and models at DIMACS
  452. (Rutgers University).  Use anonymous FTP at dimacs.rutgers.edu.  Start
  453. looking in /pub/netflow.  Another network generator is called NETGEN
  454. and is available on netlib (lp/generators).
  455.  
  456. The modeling language GAMS comes with about 150 test models, which you
  457. might be able to test your code with.
  458.  
  459. THere is a collection called MP-TESTDATA available at Konrad-Zuse-
  460. Zentrum fuer Informations-technik Berlin (ZIB).  Use anonymous FTP at
  461. ftp elib.zib-berlin.de, then do "cd pub/mp-testdata".  This directory
  462. contains various subdirectories, each of which has an index file
  463. containing further information.  Here is a brief summary:
  464.   assign:       Assignment problem
  465.      netg           - Instances generated by use of NETGEN
  466.      chrom-karyotyp - Automatic Chromosone Karyotyping
  467.      qaplib         - Quadratic assignment problems
  468.      qapgen         - Source code for quadratic assignment problem
  469.      spin-glass     - Dynamics of spin glass
  470.   cluster:      Clustering problem
  471.   lp:           Linear programming - link to NETLIB/LP/DATA
  472.   ip:           Integer and mixed integer programming
  473.      MIPLIB         - Rice University collection (see above)
  474.      bienst         - Single hard mixed integer programming problem
  475.      sac94-suite    - General 0/1 programming (Multiple Knapsack)
  476.   matching:     Matching problems in geometric format from DIMACS
  477.   maxflow:      Maximum flow problem
  478.   mincost:      Minimum cost flow and transportation problem
  479.      gte            - Problem instances from DIMACS
  480.      netg           - Instances generated by use of NETGEN program
  481.   set-parti:    Set partitioning problem
  482.   steiner-tree: Collection of Steiner tree problems
  483.   tsp:          Travelling salesman problem
  484.      TSPLIB         - "Travelling Salesman Problem Library"
  485.      passau         - Single TSP instance
  486.   vehicle-rout: (Capacitated) vehicle routing problem
  487.   generators:   Source codes for network flow and other problem
  488.         instance generating programs
  489.  
  490. John Beasley has posted information on his OR-Lib, which contains
  491. various optimization test problems.  Have a look in the Journal of the
  492. Operational Research Society, Volume 41, Number 11, Pages 1069-72.  Use
  493. anonymous FTP at mscmga.ms.ic.ac.uk [155.198.66.4], or send e-mail to
  494. umtsk99@vaxa.cc.imperial.ac.uk to get started.  Information about test
  495. problems for the problem areas listed below can be obtained by emailing
  496. o.rlibrary@ic.ac.uk with the email message being the file name for the
  497. problem areas you are interested in.
  498.  
  499.   Problem area                                  File name
  500.  
  501.   Assignment problem                            assigninfo
  502.   Crew scheduling                               cspinfo
  503.   Data envelopment analysis                     deainfo
  504.   Generalised assignment problem                gapinfo
  505.   Integer programming                           mipinfo
  506.   Linear programming                            lpinfo
  507.   Location:
  508.        capacitated warehouse location           capinfo
  509.        p-median                                 pmedinfo
  510.        uncapacitated warehouse location         uncapinfo
  511.   Multiple knapsack problem                     mknapinfo
  512.   Quadratic assignment problem                  qapinfo
  513.   Resource constrained shortest path            rcspinfo
  514.   Scheduling:
  515.        flow shop                                flowshopinfo
  516.        job shop                                 jobshopinfo
  517.        open shop                                openshopinfo
  518.   Set covering                                  scpinfo
  519.   Set partitioning                              sppinfo
  520.   Steiner:
  521.        Euclidean Steiner problem                esteininfo
  522.        Rectilinear Steiner problem              rsteininfo
  523.        Steiner problem in graphs                steininfo
  524.   Travelling salesman problem                   tspinfo
  525.   Two-dimensional cutting:
  526.        assortment problem                       assortinfo
  527.        constrained guillotine                   cgcutinfo
  528.        constrained non-guillotine               ngcutinfo
  529.        unconstrained guillotine                 gcutinfo
  530.   Vehicle routing:
  531.        fixed areas                              areainfo
  532.        fixed routes                             fixedinfo
  533.        period routing                           periodinfo
  534.        single period                            vrpfeasinfo
  535.  
  536. -----------------------------------------------------------------------
  537.  
  538. Q5.  "What is MPS format?"
  539.  
  540. A:  MPS format was named after an early IBM LP product and has emerged
  541. as a de facto standard ASCII medium among most of the commercial LP
  542. codes.  Essentially all commercial LP codes accept this format, but if
  543. you are using public domain software and have MPS files, you may need
  544. to write your own reader routine for this.  It's not too hard.  See
  545. also the comment regarding the lp_solve code, in another section of
  546. this document, for the availability of an MPS reader.
  547.  
  548. The main things to know about MPS format are that it is column oriented
  549. (as opposed to entering the model as equations), and everything
  550. (variables, rows, etc.) gets a name.  MPS format is described in more
  551. detail in [Murtagh].
  552.  
  553. MPS is an old format, so it is set up as though you were using punch
  554. cards, and is not free format. Fields start in column 1, 5, 15, 25, 40
  555. and 50.  Sections of an MPS file are marked by so-called header cards,
  556. which are distinguished by their starting in column 1.  Although it is
  557. typical to use upper-case throughout the file (like I said, MPS has
  558. long historical roots), many MPS-readers will accept mixed-case for
  559. anything except the header cards, and some allow mixed-case anywhere.
  560. The names that you choose for the individual entities (constraints or
  561. variables) are not important to the solver; you should pick names that
  562. are meaningful to you, or will be easy for a post-processing code to
  563. read.
  564.  
  565. Here is a little sample model written in MPS format (explained in more
  566. detail below):
  567.  
  568. NAME          TESTPROB
  569. ROWS
  570.  N  COST
  571.  L  LIM1
  572.  G  LIM2
  573.  E  MYEQN
  574. COLUMNS
  575.     XONE      COST                 1   LIM1                 1
  576.     XONE      LIM2                 1
  577.     YTWO      COST                 4   LIM1                 1
  578.     YTWO      MYEQN               -1
  579.     ZTHREE    COST                 9   LIM2                 1
  580.     ZTHREE    MYEQN                1
  581. RHS
  582.     RHS1      LIM1                 5   LIM2                10
  583.     RHS1      MYEQN                7
  584. BOUNDS
  585.  UP BND1      XONE                 4
  586.  LO BND1      YTWO                -1
  587.  UP BND1      YTWO                 1
  588. ENDATA
  589.  
  590. For comparison, here is the same model written out in an equation-
  591. oriented format:
  592.  
  593. Optimize
  594.  COST:    XONE + 4 YTWO + 9 ZTHREE
  595. Subject To
  596.  LIM1:    XONE + YTWO <= 5
  597.  LIM2:    XONE + ZTHREE >= 10
  598.  MYEQN:   - YTWO + ZTHREE  = 7
  599. Bounds
  600.  0 <= XONE <= 4
  601. -1 <= YTWO <= 1
  602. End
  603.  
  604. Strangely, there is nothing in MPS format that specifies the direction
  605. of optimization.  And there really is no standard "default" direction;
  606. some LP codes will maximize if you don't specify otherwise, others will
  607. minimize, and still others put safety first and have no default and
  608. require you to specify it somewhere in a control program or by a
  609. calling parameter.  If you have a model formulated for minimization
  610. and the code you are using insists on maximization (or vice versa), it
  611. may be easy to convert: just multiply all the coefficients in your
  612. objective function by (-1).  The optimal value of the objective
  613. function will then be the negative of the true value, but the values of
  614. the variables themselves will be correct.
  615.  
  616. The NAME card can have anything you want, starting in column 15.  The
  617. ROWS section defines the names of all the constraints; entries in
  618. column 2 or 3 are E for equality rows, L for less-than ( <= ) rows, G
  619. for greater-than ( >= ) rows, and N for non-constraining rows (the
  620. first of which would be interpreted as the objective function).  The
  621. order of the rows named in this section is unimportant.
  622.  
  623. The largest part of the file is in the COLUMNS section, which is the
  624. place where the entries of the A-matrix are put.  All entries for a
  625. given column must be placed consecutively, although within a column the
  626. order of the entries (rows) is irrelevant. Rows not mentioned for a
  627. column are implied to have a coefficient of zero.
  628.  
  629. The RHS section allows one or more right-hand-side vectors to be
  630. defined; most people don't bother having more than one.  In the above
  631. example, the name of the RHS vector is RHS1, and has non-zero values
  632. in all 3 of the constraint rows of the problem.  Rows not mentioned in
  633. an RHS vector would be assumed to have a right-hand-side of zero.
  634.  
  635. The optional BOUNDS section lets you put lower and upper bounds on
  636. individual variables (no * wild cards, unfortunately), instead of
  637. having to define extra rows in the matrix.  All the bounds that have
  638. a given name in column 5 are taken together as a set.  Variables not
  639. mentioned in a given BOUNDS set are taken to be non-negative (lower
  640. bound zero, no upper bound).  A bound of type UP means an upper bound
  641. is applied to the variable.  A bound of type LO means a lower bound is
  642. applied.  A bound type of FX ("fixed") means that the variable has
  643. upper and lower bounds equal to a single value.  A bound type of FR
  644. ("free") means the variable has neither lower nor upper bounds.
  645.  
  646. There is another optional section called RANGES that I won't go into
  647. here. The final card must be ENDATA, and yes, it is spelled funny.
  648.  
  649. -----------------------------------------------------------------------
  650.  
  651. Q6.  "Just a quick question..."
  652.  
  653. Q:  What is a matrix generator?
  654. A:  This is a code that creates input for an LP (or MIP, or NLP) code,
  655.     using a more natural input than MPS format.  There are no free
  656.     ones.  Matrix generators can be roughly broken into two classes,
  657.     column oriented ones, and equation oriented ones.  The former class
  658.     is older, and includes such commercial products as OMNI (Haverley
  659.     Systems) and DATAFORM (Ketron).  Big names in the latter class are
  660.     GAMS (Scientific Press), LINGO (LINDO Systems), and AMPL
  661.     (information is in netlib/opt on the netlib server, or send email
  662.     to 70742.555@compuserve.com).  These products have links to various
  663.     solvers (commercial and otherwise).
  664.  
  665. Q:  How do I diagnose an infeasible LP model?
  666. A:  A model is infeasible if the constraints are inconsistent, i.e., if
  667.     no feasible solution can be constructed.  It's often difficult to
  668.     track down a cause.  The cure may even be ambiguous: is it that
  669.     some demand was set too high, or a supply set too low?  A useful
  670.     technique is Goal Programming, one variant of which is to include
  671.     two explicit slack variables (positive and negative), with huge
  672.     cost coefficients, in each constraint.  The revised model is
  673.     guaranteed to have a solution, and you can look at which rows have
  674.     slacks that are included in the "optimal" solution.  By the way, I
  675.     recommend a Goal Programming philosophy even if you aren't having
  676.     trouble with feasibility; "come on, you could probably violate this
  677.     constraint for a price."  8v)  Another approach is Fourier-Motzkin
  678.     Elimination (article by Danztig and Eaves in the Journal of
  679.     Combinatorial Theory (A) 14, 288-297 (1973).  A software system
  680.     called ANALYZE was developed by Harvey Greenberg to provide
  681.     computer-assisted analysis, including rule-based intelligence;
  682.     for further information about this code, and a bibliography of more
  683.     than 400 references on the subject of model analysis, contact
  684.     Greenberg at HGREENBERG@cudnvr.denver.colorado.edu.  A system based
  685.     on the MINOS solver, called MINOS(IIS), available from John
  686.     Chinneck (chinneck@sce.carleton.ca), can also be used to identify
  687.     a so-called Irreducible Infeasible Subset.  As a final comment,
  688.     commercial codes sometimes have built-in features to help.
  689.  
  690. Q:  I want to know the specific constraints that contradict each other.
  691. A:  This may not be a well posed problem.  If by this you mean you want
  692.     to find the minimal set of constraints that should be removed to
  693.     restore feasibility, this can be modeled as an Integer LP (which
  694.     means, it's potentially a harder problem than the underlying LP
  695.     itself). Start with a Goal Programming approach as outlined above,
  696.     and introduce some 0-1 variables to turn the slacks off or on.
  697.     Then minimize on the sum of these 0-1 variables.  An article
  698.     covering another approach to this question is by Chinneck and
  699.     Dravnieks in the Spring 1991 ORSA Journal on Computing (vol 3,
  700.     number 2).
  701.  
  702. Q:  I just want to know whether or not a feasible solution *exists*.
  703. A:  From the standpoint of computational complexity, finding out if a
  704.     model has a feasible solution is essentially as hard as finding the
  705.     optimal LP solution, within a factor of 2 on average, in terms of
  706.     effort in the Simplex Method.  There are no shortcuts in general,
  707.     unless you know something useful about your model's structure
  708.     (e.g., if you are solving some form of a transportation problem,
  709.     you may be able to assure feasibility by checking that the sources
  710.     add up to at least as great a number as the sum of the
  711.     destinations).
  712.  
  713. Q:  I have an LP, except it's got several objective functions.
  714. A:  Fundamental to the class of Multiple Criteria models is that there
  715.     may no longer be the concept of a unique solution.  I am unaware of
  716.     any public domain code to approach such problems, though I have
  717.     seen a reference to MATLAB's Optimization Toolbox.  Approaches that
  718.     have worked are:
  719.     - Goal Programming (treat the objectives as constraints with costed
  720.       slacks), or, almost equivalently, form a composite function from
  721.       the given objective functions;
  722.     - Pareto preference analysis (essentially brute force examination
  723.       of all vertices);
  724.     - Put your objective functions in priority order, optimize on one
  725.       objective, then change it to a constraint fixed at the optimal
  726.       value (perhaps subject to a small tolerance), and repeat with the
  727.       next function.
  728.     There is a section on this whole topic in [Nemhauser].  {Hwang] has
  729.     also been recommended by a Usenet reader.  As a final piece of
  730.     advice, if you can cast your model in terms of physical realities,
  731.     or dollars and cents, sometimes the multiple objectives disappear!  8v)
  732.  
  733. Q:  I have an LP that has large almost-independent matrix blocks that
  734.     are linked by a few constraints.  Can I take advantage of this?
  735. A:  In theory, yes.  See section 6.2 in [Nemhauser] for a discussion of
  736.     Dantzig-Wolfe decomposition.  I am told that the commercial code
  737.     OSL has features to assist in doing this.  With any other code,
  738.     you'll have to create your own framework and then call the LP
  739.     solver to solve the subproblems.  The folklore is that generally
  740.     such schemes take a long time to converge so that they're slower
  741.     than just solving the model as a whole, although research
  742.     continues.  For now my advice, unless you are using OSL or your
  743.     model is so huge that a good solver can't fit it in memory, is to
  744.     not bother decomposing it.  It's probably more cost effective to
  745.     upgrade your solver, if the algorithm is limiting you, than to
  746.     invest your time; but I suppose that's an underlying theme in a lot
  747.     of my advice. 8v)
  748.  
  749. Q:  I need to find all integer points in a polytope.
  750. A:  There is no known way of doing this efficiently (i.e., with an
  751.     algorithm that grows only polynomially with the problem size).  For
  752.     small models, it may be practical to find your answer by complete
  753.     enumeration.  A related question is how to find all the vertices of
  754.     an LP.  [Schrijver], [Balinski], and [Mattheis] are said to discuss
  755.     this.  Two people working on another related question, that of
  756.     finding the extreme points of the convex hull of a finite number of
  757.     points, are Dick Helgason (helgason@seas.smu.edu) and Betty Hickman
  758.     (hickman@felix.unomaha.edu).
  759.  
  760. Q:  Are there any parallel LP codes?
  761. A:  IBM has announced a parallel Branch and Bound capability in their
  762.     package OSL, for use on clusters of workstations.  "This is real,
  763.     live commercial software, not a freebie. Contact
  764.     forrest@watson.ibm.com".  Jeffrey Horn (horn@cs.wisc.edu) recently
  765.     compiled a bibliography of papers relating to research on parallel
  766.     B&B.  There is an annotated bibliography of parallel methods in
  767.     Operations Research in general, in Vol 1 (1), 1989 of the ORSA
  768.     Journal on Computing, although by now it might be a little out of
  769.     date.  I'm not aware of any implementations (beyond the "toy"
  770.     level) of general sparse Simplex or interior-point solvers on
  771.     parallel machines.  If your particular model is a good candidate
  772.     for decomposition (see topic, above) then parallelism could be very
  773.     useful, but you'll have to implement it yourself.
  774.  
  775.     Here's what I say to people who write parallel LP solvers as class
  776.     projects:
  777.  
  778.     You are probably working with the tableau form of the Simplex
  779.     method.  This method works well for small models, but it is
  780.     inefficient for most real-world models because such models are
  781.     usually <1% dense.  Sparse matrix methods dominate here.  It may
  782.     well be true that you can get good parallel speedups with your
  783.     code, but I'd wager that by the time you get to problems with 1000
  784.     rows, any parallel-dense LP code will be slower than a single-
  785.     processor sparse code.  And, worse yet, I think it's generally
  786.     accepted that no one currently knows how to do a good parallel
  787.     sparse LP code.  I wouldn't be harping on this point, except that
  788.     most people's interest in parallelism is because of the promise of
  789.     scalability, in which case large-scale considerations are
  790.     important.  Writing even a single-processor large-scale LP code is
  791.     a multi-year project, realistically.  The point is, don't get too
  792.     enthralled by speedups in your code, unless there's something to
  793.     what you are doing that I haven't guessed.
  794.  
  795. Q:  What software is there for the Traveling Salesman Problem (TSP)?
  796. A:  TSP is a famously hard problem that has attracted many of the best
  797.     minds in the field.  Solving for a proved optimum is combinatorial
  798.     in nature; methods have been explored both to give proved optimal
  799.     solutions, and to give approximate but "good" solutions.  To my
  800.     knowledge, there aren't any commercial products to solve this
  801.     problem, nor are there any public domain codes available by
  802.     anonymous FTP.  For a bibliography, check the Integer Programming
  803.     section of [Nemhauser], particularly the references with the names
  804.     Groetschel and/or Padberg in them.  A good reference is [Lawler].
  805.     There are some heuristics for getting a "good" solution in the
  806.     article by Lin and Kernighan in Operations Research, Vol 21 (1973),
  807.     pp 498-516.  [Syslo] contains some algorithms and Pascal code.
  808.     Numerical Recipes [Press] contains code that uses Simulated
  809.     Annealing.  [Bentley] is said to contain a description of how to
  810.     write a TSP code.  Bob Craig of AT&T (kat3@uscbu.ih.att.com) has
  811.     software, for both exact solution and heuristics, that he is
  812.     willing to make available to those who request it.  Likewise, Chad
  813.     Hurwitz (churritz@crash.cts.com), offers a code called tsp_solve
  814.     for heuristic and optimal solution, to those who email him.
  815.  
  816. Q:  What software is there for Stochastic Programming?
  817.  
  818. A:  [Thanks to Derek Holmes, dholmes@engin.umich.edu, for this text.]
  819.     Your success solving a stochastic program depends greatly on the
  820.     characteristics of your problem.  The two broad classes of
  821.     stochastic programming problems are recourse problems and chance-
  822.     constrained (or probabilistically constrained) problems.
  823.  
  824.     Recourse Problems are staged problems wherein one alteranates
  825.     decisions with realizations of stochastic data.  The objective is
  826.     to minimize total expected costs of all decisions.  The main
  827.     sources of code (not necessarily public domain) depend on how the
  828.     data is distributed and how many stages (decision points) are in
  829.     the problem.  For discretely distributed multistage problems, a
  830.     good package called MSLiP is available from Gus Gassman
  831.     (gassmann@ac.dal.ca, written up in Math. Prog. 47,407-423) Also,
  832.     for not huge discretely distributed problems, a deterministic
  833.     equivalent can be formed which can be solved with a standard
  834.     solver.  STOPGEN, available via anonymous FTP from this author is a
  835.     program which forms deterministic equiv.  MPS files from stopro
  836.     problems in standard format (Birge, et. al., COAL newsletter 17).
  837.     The most recent program for continuously distributed data is BRAIN,
  838.     by K. Frauendorfer (frauendorfer@sgcl1.unisg.ch, written up in
  839.     detail in the author's monograph ``Stochastic Two-Stage
  840.     Programming'', Lecture Notes in Economics & Math.  Systems #392
  841.     (Springer-Verlag).
  842.  
  843.     CCP problems are not usually staged, and have a constraint of the
  844.     form Pr( Ax <= b ) >= alpha.  The solvability of CCP problems
  845.     depends on the distribution of the data (A &/v b).  I don't know of
  846.     any public domain codes for CCP probs., but you can get an idea of
  847.     how to approach the problem by reading Chapter 5 by Prof.  A.
  848.     Prekopa (prekopa@cancer.rutgers.edu) Y. Ermoliev, and R. J-B. Wets,
  849.     eds., Numerical Techniques for Stochastic Optimization (Series in
  850.     Comp.  Math. 10, Springer-Verlag).
  851.  
  852.     Both Springer Verlag texts mentioned above are good introductory
  853.     references to Stochastic Programming.  This list of codes is far
  854.     from comprehensive, but should serve as a good starting point.
  855.  
  856. Q:  I need to do post-optimal analysis.
  857. A:  Many commercial LP codes have features to do this.  Also called
  858.     Ranging or Sensitivity Analysis, it gives information about how the
  859.     coefficients in the problem could change without affecting the
  860.     nature of the solution.  Most LP textbooks, such as [Nemhauser],
  861.     describe this.  Unfortunately, all this theory applies only to LP.
  862.  
  863.     For a MIP model with both integer and continuous variables, you
  864.     could get a limited amount of information by fixing the integer
  865.     variables at their optimal values, re-solving the model as an LP,
  866.     and doing standard post-optimal analyses on the remaining
  867.     continuous variables; but this tells you nothing about the integer
  868.     variables, which presumably are the ones of interest.  Another MIP
  869.     approach would be to choose the coefficients of your model that are
  870.     of the most interest, and generate "scenarios" using values within
  871.     a stated range created by a random number generator.  Perhaps five
  872.     or ten scenarios would be sufficient; you would solve each of them,
  873.     and by some means compare, contrast, or average the answers that
  874.     are obtained.  Noting patterns in the solutions, for instance, may
  875.     give you an idea of what solutions might be most stable.  A third
  876.     approach would be to consider a goal-programming formulation;
  877.     perhaps your desire to see post-optimal analysis is an indication
  878.     that some important aspect is missing from your model.
  879.  
  880. Q:  Some versions of the Simplex algorithm require as input a vertex.
  881.     Do all LP codes require a starting vertex?
  882. A:  No.  You just have to give an LP code the constraints and the
  883.     objective function, and it will construct the vertices for you.
  884.     Most codes go through a so-called two phase method, wherein the
  885.     code first looks for a feasible solution, and then works on getting
  886.     an optimal solution.  The first phase can begin anywhere, such as
  887.     with all the variables at zero (though commercial codes typically
  888.     have a so-called "crash" algorithm to pick a better starting
  889.     point).  So, no, you don't have to give a code a starting point.
  890.     On the other hand, it is not uncommon to do so, because it can
  891.     speed up the solution time tremendously.  Commercial codes usually
  892.     allow you to do this (they call it a "basis", though that's a loose
  893.     usage of a specific linear algebra concept); free codes generally
  894.     don't.  You'd normally want to bother with a starting basis only
  895.     when solving families of related and difficult LP's (i.e., in some
  896.     sort of production mode).
  897.  
  898. -----------------------------------------------------------------------
  899.  
  900. Q7.  "What references are there in this field?"
  901.  
  902. A:  What follows here is an idiosyncratic list, a few books that I like
  903. or have been recommended on the net.  I have *not* reviewed them all.
  904.  
  905. Regarding the common question of the choice of textbook for a college
  906. LP course, it's difficult to give a blanket answer because of the
  907. variety of topics that can be emphasized: brief overview of algorithms,
  908. deeper study of algorithms, theorems and proofs, complexity theory,
  909. efficient linear algebra, modeling techniques, solution analysis, and
  910. so on.  An unscientific poll of ORCS-L mailing list readers uncovered a
  911. consensus that [Chvatal] was in most ways pretty good, at least for an
  912. algorithmically oriented class.  For a class in modeling, a book about
  913. a commercial code (LINDO, AMPL, GAMS are suggested) would be useful,
  914. especially if the students are going to use such a code; and I have
  915. always had a fondness for [Williams].  I have marked with an arrow
  916. ("->") books that received positive mention in this poll (I included
  917. my own votes too  8v) ).
  918.  
  919. General reference
  920. -  Nemhauser, Rinnooy Kan, & Todd, eds, Optimization, North-Holland,
  921.    1989.  (Very broad-reaching, with large bibliography.  Good
  922.    reference; it's the place I tend to look first.  Expensive, and
  923.    tough reading for beginners.)
  924.  
  925. LP textbooks
  926. -> Bazaraa, Jarvis and Sherali.  Linear Programming and Network Flows.
  927.    (Grad level.)
  928. -> Chvatal, Linear Programming, Freeman, 1983.  (Undergrad or grad.)
  929. -> Daellenbach and Bell, A User's Guide to LP.  (Good for engineers,
  930.    but may be out of print.)
  931. -> Ecker & Kupferschmid, Introduction to Operations Research.
  932. -  Ignizio, J.P. & Cavalier, T.M., Linear Programming, Prentice Hall,
  933.    1994.  (Covers usual LP topics, plus interior point, multi-objective
  934.    and heuristic techniques.)
  935. -  Luenberger, Introduction to Linear and Nonlinear Programming,
  936.    Addison Wesley, 1984.  (Updated version of an old standby.)
  937. -> Murtagh, B., Advanced Linear Programming, McGraw-Hill, 1981.  (Good
  938.    one after you've read an introductory text.)
  939. -  Murty, K., Linear and Combinatorial Programming.
  940. -> Schrijver, A., Theory of Linear and Integer Programming, Wiley,
  941.    1986.  (Advanced)
  942. -> Taha, H., Operations Research: An Introduction, 1987.
  943. -> Thie, P.R., An Introduction to Linear Programming and Game Theory,
  944.    Wiley, 1988.
  945. -> Williams, H.P., Model Building in Mathematical Programming, Wiley
  946.    1993, 3rd edition.  (Little on algorithms, but excellent for
  947.    learning what makes a good model.)
  948.  
  949. Interior Point LP (popularly but imprecisely called "Karmarkar")
  950. (There is also a bibliography (with over 1300 entries!?!) obtainable by
  951. mailing to "netlib@ornl.gov" and saying "send intbib.bib from bib".)
  952. -  Arbel, Ami, Exploring Interior-Point Linear Programming, MIT Press,
  953.    1993.  Includes small-scale IBM PC software (binary only).
  954. -> Fang and Puthenpura, Linear Optimization and Extensions.  (Grad
  955.    level textbook, also contains some Simplex and Ellipsoid.  I heard
  956.    mixed opinions on this one.)
  957. -  Lustig, Marsten & Shanno, "Interior Point Methods for Linear
  958.    Programming: Computational State of the Art", ORSA Journal on
  959.    Computing, Vol. 6, No. 1, Winter 1994, pp. 1-14.  Followed by
  960.    commentary articles, and a rejoinder by the authors.
  961.  
  962. Documentation for commercial codes
  963. -> Brooke, Kendrick & Meeraus, GAMS: A Users' Guide, The Scientific
  964.    Press, 1988.
  965. -> Fourer, Gay & Kernighan, AMPL: A Modeling Language for Mathematical
  966.    Programming, The Scientific Press, 1992.
  967. -> Greenberg, H.J., Modeling by Object-Driven Linear Elemental
  968.    Relations: A User's Guide for MODLER, Kluwer Academic Publishers,
  969.    1993.
  970. -> Schrage, L., LINDO: An Optimization Modeling System, The Scientific
  971.    Press, 1991.
  972.  
  973. Books containing source code
  974.  
  975. -  Best and Ritter, Linear Programming: active set analysis and
  976.    computer programs, Prentice-Hall, 1985.
  977. -  Bertsekas, D.P., Linear Network Optimization: Algorithms and Codes,
  978.    MIT Press, 1991.
  979. -  Bunday and Garside, Linear Programming in Pascal, Edward Arnold
  980.    Publishers, 1987.
  981. -  Bunday, Linear Programming in Basic (presumably the same publisher).
  982. -  Kennington & Helgason, Algorithms for Network Programming, Wiley,
  983.    1980.  (A special case of LP; contains Fortran source code.)
  984. -  Press, Flannery, Teukolsky & Vetterling , Numerical Recipes,
  985.    Cambridge, 1986.    (Comment: use their LP code with care.)
  986. -  Syslo, Deo & Kowalik, Discrete Optimization Algorithms with Pascal
  987.    Programs, Prentice-Hall (1983).  (Contains code for 28 algorithms
  988.    such as Revised Simplex, MIP, networks.)
  989.  
  990. Other publications
  991. -  Ahuja, Magnanti & Orlin, Network Flows, Prentice Hall, 1993.
  992. -  Balas, E. and Martin, C., "Pivot And Complement: A Heuristic For 0-1
  993.    Programming Problems", Management Science, 1980, Vol 26, pp 86-96.
  994. -  Balinski, M.L., "An Algorithm for Finding all Vertices of Convex
  995.    Polyhedral Sets", SIAM J. 9, 1, 1961.
  996. -  Bentley, J.L., "Writing Efficient Programs," Prentice Hall, 1982.
  997. -  Bondy & Murty, Graph Theory with Applications.
  998. -  Forsythe, Malcolm & Moler, Computer Methods for Mathematical
  999.    Computations, Prentice-Hall.
  1000. -> Gill, Murray and Wright, Numerical Linear Algebra and Optimization,
  1001.    Addison-Wesley, 1991.
  1002. -  Greenberg, H.J., A Computer-Assisted Analysis System for
  1003.    Mathematical Programming Models and Solutions: A User's Guide for
  1004.    ANALYZE, Kluwer Academic Publishers, 1993.
  1005. -  Hwang & Yoon, Multiple Attribute Decision Making : Methods and
  1006.    Applications, Springer-Verlag, Lecture Notes #186.
  1007. -  Lawler, Lenstra, et al, The Traveling Salesman Problem, Wiley, 1985.
  1008. -  Mattheis and Rubin, "A Survey and Comparison of Methods for Finding
  1009.    All Vertices of Convex Polyhedral Sets", Mathematics of Operations
  1010.    Research, vol. 5 no. 2 1980, pp. 167-185.
  1011. -  Murty, Network Programming, Prentice Hall, 1992.
  1012. -  Papadimitriou & Steiglitz, Combinatorial Optimization.
  1013. -  Reeves, C.R., ed., Modern Heuristic Techniques for Combinatorial
  1014.    Problems, Halsted Press (Wiley), 1993.  (Contains chapters on tabu
  1015.    search, simulated annealing, genetic algorithms, neural nets, and
  1016.    Lagrangian relaxation.)
  1017.  
  1018. -----------------------------------------------------------------------
  1019.  
  1020. Q8.  "How do I access the Netlib server?"
  1021.  
  1022. A:  If you have FTP access, you can try "ftp netlib2.cs.utk.edu", using
  1023. "anonymous" as the Name, and your email address as the Password.  Do a
  1024. "cd <dir>" where <dir> is whatever directory was mentioned, and look
  1025. around, then do a "get <filename>" on anything that seems interesting.
  1026. There often will be a "README" file, which you would want to look at
  1027. first.  Another FTP site is "netlib.att.com", although you will first
  1028. need to do "cd netlib" before you can cd to the <dir> you are
  1029. interested in.  Alternatively, you can reach an e-mail server via
  1030. "netlib@ornl.gov", to which you can send a message saying "send index
  1031. from <dir>"; follow the instructions you receive.
  1032.  
  1033. -----------------------------------------------------------------------
  1034.  
  1035. Q9.  "Who maintains this FAQ list?"
  1036.  
  1037. A:  John W. Gregory      jwg@cray.com          612-683-3673
  1038.     Applications Dept.   Cray Research, Inc.   Eagan, MN 55121 USA
  1039.  
  1040. This article is Copyright 1994 by John W. Gregory.  It may be freely
  1041. redistributed in its entirety provided that this copyright notice is
  1042. not removed.  It may not be sold for profit or incorporated in
  1043. commercial documents without the written permission of the copyright
  1044. holder.  Permission is expressly granted for this document to be made
  1045. available for file transfer from installations offering unrestricted
  1046. anonymous file transfer on the Internet.
  1047.  
  1048. The material in this document does not reflect any official position
  1049. taken by Cray Research, Inc.  While all information in this article is
  1050. believed to be correct at the time of writing, is it provided "as is"
  1051. with no warranty implied.
  1052.  
  1053. If you wish to cite this FAQ formally (hey, someone actually asked me
  1054. this), you may use:
  1055.   Gregory, John W. <jwg@cray.com> (1994) "Linear Programming FAQ",
  1056.   Usenet sci.answers.  Available via anonymous FTP from rtfm.mit.edu
  1057.   in /pub/usenet/sci.answers/linear-programming-faq
  1058. There's a mail server on that machine, so if you don't have FTP
  1059. privileges, you can send an e-mail message to
  1060. mail-server@rtfm.mit.edu containing:
  1061.     send usenet/sci.answers/linear-programming-faq
  1062. as the body of the message to receive the latest version (it is posted
  1063. on the first working day of each month).  This FAQ is also cross-posted
  1064. to news.answers.
  1065.  
  1066. In compiling this information, I have drawn on my own knowledge of the
  1067. field, plus information from contributors to Usenet groups and the
  1068. ORCS-L mailing list.  I give my thanks to all those who have offered
  1069. advice and support.  I've tried to keep my own biases (primarily,
  1070. toward the high end of computing) from dominating what I write here,
  1071. and other viewpoints that I've missed are welcome.  Suggestions,
  1072. corrections, topics you'd like to see covered, and additional material
  1073. are solicited.
  1074.  
  1075. -----------------------------------------------------------------------
  1076. END linear-programming-faq
  1077.  
  1078.